// c++构造次序、析构次序
#include <iostream> 
using namespace std;

class A
{
public:
    A(){cout << "构造了A" << endl;}
    ~A(){cout << "析构了A" << endl;}
};

class B
{
public:
    B(){cout << "构造了B" << endl;}
    ~B(){cout << "析构了B" << endl;}
};

class Node
{   
    //声明次序
    B b;
    A a;

public:
    //构造函数
    //以下不管是哪一个版本都会先构造B后A
    //类成员的构造次序，根初始化列表次序无关，而根声明次序有关；先声明哪一个，就会先构造哪一个
    Node():a(),b(){cout << "构造了Node" << endl;}
    //Node():b(),a(){cout << "构造了Node" << endl;}

    //析构函数
    //先析构整个对象，在析构各个对象成员；析构会与构造的次序相反
    ~Node(){cout << "析构了Node" << endl;}
};

int main(int argc, char const *argv[])
{
    Node node;
    
    return 0;
}
